home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-02
/
drawer.zip
/
DRAGGER.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-01-04
|
3KB
|
147 lines
{$L-,D-}
unit Draggers;
interface
type
DragState= ( Idle, Size, Move );
Dragger = object
x1, y1 : word; { original position }
xl, yl : word; { last position }
procedure StartDrag( x, y : word );
procedure Drag( x, y : word );
procedure EndDrag( x, y : word);
procedure GetRange( var x1, y1, x2, y2 : word);
end;
BDragger = object(Dragger)
xm1, ym1,
xm2, ym2 : word; { points for Move mode }
DS : DragState;
procedure Initialize( ds : DragState; xm1, ym1, xm2, ym2 : word);
procedure StartDrag( x, y : word); override;
procedure Drag( x, y : word); override;
procedure EndDrag( x, y : word); override;
end;
implementation
uses MSGraph;
procedure Dragger.StartDrag( x, y : word );
begin
self.x1 := x;
self.y1 := y;
self.xl := x;
self.yl := y;
end;
procedure Dragger.Drag( x, y : word);
begin
_SetWriteMode( _GXOR );
_SetLineStyle( $CCCC );
with self do begin
_MoveTo( x1, y1 );
_LineTo( xl, yl);
_MoveTo( x1, y1 );
_LineTo( x, y);
xl := x;
yl := y;
end;
end;
procedure Dragger.EndDrag( x, y : word);
begin
_SetWriteMode( _GXOR );
_SetLineStyle( $CCCC );
with self do begin
_MoveTo( x1, y1 );
_LineTo( xl, yl);
xl := x;
yl := y;
end;
end;
procedure Dragger.GetRange( var x1, y1, x2, y2 : word);
begin
x1 := self.x1;
y1 := self.y1;
x2 := self.xl;
y2 := self.yl;
end;
procedure DrawBox( x1, y1, x2, y2 : word);
begin
_SetWriteMode( _GXOR );
_SetLineStyle( $CCCC );
_Rectangle( _GBORDER, x1, y1, x2, y2);
end;
procedure BDragger.Initialize( ds : DragState; xm1, ym1, xm2, ym2 : word);
begin
self.DS := ds;
self.xm1 := xm1;
self.ym1 := ym1;
self.xm2 := xm2;
self.ym2 := ym2;
end;
procedure BDragger.StartDrag( x, y : word);
begin
with self do begin
inherited StartDrag( x, y );
{ if DS=Move then DrawBox( xm1, ym1, xm2, ym2 ); }
DrawBox( xm1, ym1, xm2, ym2 );
end;
end;
procedure BDragger.Drag( x, y : word );
var
dx, dy : integer;
begin
with self do begin
if (xl=x) and (yl=y) then exit;
if DS=Move then begin
dx := x-xl;
dy := y-yl;
DrawBox( xm1, ym1, xm2, ym2 );
inc( xm1, dx);
inc( ym1, dy);
inc( xm2, dx);
inc( ym2, dy);
DrawBox( xm1, ym1, xm2, ym2 );
end
else if DS=Size then begin
dx := x-xl;
dy := y-yl;
DrawBox( xm1, ym1, xm2, ym2 );
inc( xm2, dx);
inc( ym2, dy);
DrawBox( xm1, ym1, xm2, ym2 );
end;
xl := x;
yl := y;
end;
end;
procedure BDragger.EndDrag( x, y : word);
begin
with self do begin
{ remove RB box }
if DS=Move then
DrawBox( xm1, ym1, xm2, ym2)
else
DrawBox( x1, y1, xl, yl);
DS := Idle;
end;
end;
begin
end.